package com.settlement.system.model.entity.common;

import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.HeadFontStyle;
import com.alibaba.excel.annotation.write.style.HeadRowHeight;
import com.alibaba.excel.annotation.write.style.HeadStyle;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.settlement.system.converter.*;
import io.swagger.annotations.ApiModelProperty;
import jakarta.validation.constraints.NotNull;
import lombok.Data;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;

/**
 * 唯品会账单明细
 *
 * @author Ximi
 * @since 2020-04-17
 */
@Data
@ExcelIgnoreUnannotated
@HeadStyle(fillBackgroundColor = 9, fillForegroundColor = 9)
@HeadRowHeight(value = 20)
@HeadFontStyle(fontHeightInPoints = 14)
public class TblWpBillOtherDetail extends BaseModel implements Serializable {


    /**
     * 全局唯一ID
     */
    @NotNull
    @ExcelProperty(value = "唯一ID", index = 0,converter = BigNumberTabFormatConvert.class)
    private String globalId;

    /**
     * 公司编码
     */
    private String companyNo;

    /**
     * 公司名称
     */
    private String companyName;

    /**
     * 店铺名称
     */
    @ExcelProperty(value = "店铺名称")
    private String shopName;

    /**
     * 店铺编码
     */
    @ExcelProperty(value = "店铺编码")
    private String shopNo;

    /**
     * 唯品销售订单号
     */
    private String orderNum;

    /**
     * 账单编码
     */
    @ExcelProperty(value = "账单编码")
    private String billNumber;

    /**
     * 采购订单号
     */
    @ExcelProperty(value = "采购订单号")
    private String poNo;

    /**
     * PO单号
     */
    @ExcelProperty(value = "PO单号", index = 1)
    private String origPoNo;

    /**
     * 回采PO对应原PO号
     */
    @ExcelProperty(value = "回采PO对应原PO号")
    private String returnVariancePoNo;

    /**
     * 退供单号
     */
    @ExcelProperty(value = "退供单号", index = 2)
    private String vendorReturnNo;

    /**
     * 采购订单创建日期
     */
    private Date poCreationDate;

    /**
     * 供应商代码
     */
    private String vendorCode;

    /**
     * 供应商名称
     */
    private String vendorName;

    /**
     * 品牌名称
     */
    @ExcelProperty(value = "品牌名称")
    private String wpBrandName;


    /**
     * 专场ID
     */
    private String brandId;

    /**
     * 专场名称
     */
    private String vBrandName;

    /**
     * 协议号
     */
    private String contractNumber;

    /**
     * 商助
     */
    private String brandAdmin;

    /**
     * 货号
     */
    private String goodsNo;

    /**
     * 条码
     */
    @ExcelProperty(value = "条码",converter = BigNumberTabFormatConvert.class)
    private String barcode;

    /**
     * 条码名称
     */
    private String barcodeDescription;


    /**
     * 仓库
     */
    @ExcelProperty(value = "仓库")
    private String areaWarehouse;

    /**
     * 税率
     */
    @ExcelProperty(value = "税率")
    private BigDecimal taxRate;


    /**
     * 结算不含税单价
     */
    @ExcelProperty(value = "结算不含税单价")
    private BigDecimal billPrice;

    /**
     * 结算不含税单价
     */
    private BigDecimal payableBillAmount;

    /**
     * 数量
     */
    private Integer transactionQuantity;


    /**
     * 可付数量
     */
    @ExcelProperty(value = "数量")
    private BigDecimal quantity;

    /**
     * 其他明细类型
     */
    @ExcelProperty(value = "类型")
    private String sourceLineName;

    /**
     * 是否跨月
     */
    @ExcelProperty(value = "是否跨月")
    private String specialReturnFlag;

    /**
     * 订单发货类型
     */
    @ExcelProperty(value = "订单发货类型")
    private String warehouseExt;


    /**
     * 可付金额（不含税）
     */
    private BigDecimal billAmount;

    /**
     * 参考销售价格
     */
    private BigDecimal referenceSalePrice;


    /**
     * 已出数量
     */
    private BigDecimal prebilledQuantity;

    /**
     * 可付金额（含税）
     */
    @ExcelProperty(value = "含税结算金额")
    private BigDecimal totalBillAmount;

    /**
     * 币种
     */
    private String currencyCode;

    /**
     * 批次号
     */
    private String vin;

    /**
     * 活动到手价
     */
    private BigDecimal activeOrderPrice;

    /**
     * 活动类型
     */
    private String activeType;

    /**
     * 活动名称
     */
    private String activeName;

    /**
     * 是否换货
     */
    private String exchangeFlag;

    /**
     * 是否预购
     */
    private String prebuyOrderFlag;

    /**
     * 客退类型
     */
    private String custReturnType;

    /**
     * 直退运单号
     */
    private String transportNo;

    /**
     * 已出账单不含税金额（进度款中可付不含税金额）
     */
    private BigDecimal prebilledBillAmount;

    /**
     * 上线时间
     */
    private Date onlineDate;

    /**
     * 退供差异单号
     */
    private String returnVarianceDocNo;

    /**
     * 扣率
     */
    @ExcelProperty(value = "扣率")
    private BigDecimal discountRate;

    /**
     * 凭证摘要FPP:首期（提前),FP:首期,AP:全款,TP:尾款
     */
    @ExcelProperty(value = "凭证摘要", converter = WpVoucherSummaryConvert.class)
    private String voucherSummary;

    /**
     * 档期
     */
    @ExcelProperty(value = "档期")
    private String calendar;

    /**
     * 暂估金额
     */
    @ExcelProperty(value = "暂估40%")
    private BigDecimal estimateAmount;

    /**
     * 入账数量
     */
    @ExcelProperty(value = "入账数量")
    private BigDecimal enterQty;

    /**
     * NC收入
     */
    @ExcelProperty(value = "NC收入")
    private BigDecimal amount;

    /**
     * 100%数量
     */
    @ExcelProperty(value = "100%数量")
    private BigDecimal allQty;

    /**
     * 100%收入
     */
    @ExcelProperty(value = "100%收入")
    private BigDecimal allAmount;

    /**
     * 100%终端收入
     */
    @ExcelProperty(value = "100%终端收入")
    private BigDecimal allTerminalAmount;

    /**
     * 100%平台扣费
     */
    @ExcelProperty(value = "100%平台扣费")
    private BigDecimal allPlatformAmount;

    /**
     * 品牌编码
     */
    private String brandNo;

    /**
     * 品牌名称
     */
    @ExcelProperty(value = "品牌简称")
    private String brandName;

    /**
     * 商品编码
     */
    private String itemNo;

    /**
     * 备注（应收）
     */
    @ExcelProperty(value = "备注（应收）")
    private String remark;

    /**
     * 采购单号条码
     */
    @ExcelProperty(value = "采购单号条码",converter = BigNumberTabFormatConvert.class)
    private String poItemNo;

    /**
     * 销售日期
     */
    @ExcelProperty(value = "销售日期", converter = DateFormatConvert.class)
    private Date sendDate;

    /**
     * 结算期间
     */
    @ExcelProperty(value = "结算期间")
    private String settleAccountPeriod;

    /**
     * 入账月份
     */
    @ExcelProperty(value = "入账月份")
    private String entryAccountMonth;

    /**
     * 结账月份
     */
    @ExcelProperty(value = "结账月份")
    private String settleAccountMonth;

    /**
     * 账单类别　M 月结账单，P 进度账单 ，H 人工账单，T 经销账单，TGCY 退供差异账单
     */
    @ExcelProperty(value = "账单类别", converter = WpBillNumberTypeConvert.class)
    private String billNumberType;

    /**
     * 账单明细 1:销售明细 2:客退明细 3:其他明细
     */
    @ExcelProperty(value = "账单明细", converter = WpOrderTypeConvert.class)
    private Integer orderType;

    /**
     * 差异类别
     */
    @ExcelProperty(value = "差异类别", converter = WpDiffTypeConvert.class, index = 3)
    private String diffType;

    /**
     * 大类
     */
    private String category;

    /**
     * 签发时间
     */
    private Date signTime;

    /**
     * 进度状态
     */
    private String processStatus;

    /**
     * 分库字段
     */
    private String shardingFlag;

    /**
     * 大类名称
     */
    @ExcelProperty(value = "大类")
    private String categoryName;

    /**
     * JITX发货方式
     */
    @ExcelProperty(value = "JITX发货方式")
    private String poWarehouseType;

    /**
     * 供应商商品编码
     */
    @ExcelProperty(value = "供应商商品编码")
    private String vendorGoodsNo;

    /**
     * 尺码
     */
    @ExcelProperty(value = "尺码")
    private String itemSize;

    /**
     * 发货模式
     */
    @ExcelProperty(value = "发货模式",converter = WpDeliveryTypeConvert.class)
    private Integer deliveryType;

    /**
     * 价格日期
     */
    @ExcelProperty(value = "价格日期",converter = DateFormatConvert.class)
    private Date priceTime;

    /**
     * 发货单价
     */
    @ExcelProperty(value = "发货单价")
    private BigDecimal price;

    /**
     * 发货单价
     */
    @ExcelProperty(value = "价格差异")
    private BigDecimal priceDif;


    /**
     * 采购档期名称
     */
    @ExcelProperty(value = "采购档期名称")
    private String scheduleName;

    /**
     * 采购档期编号
     */
    @ExcelProperty(value = "采购档期编号")
    private String scheduleId;

    /**
     * 销售订单号
     */
    @ExcelProperty(value = "销售订单号",converter = BigNumberTabFormatConvert.class)
    private String so;

    /**
     * 业务发生日期
     */
    @ExcelProperty(value = "业务发生日期", converter = DateFormatConvert.class)
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date v2TrxDate;

    /**
     * 数据所属期间
     */
    @ExcelProperty(value = "数据所属期间")
    private String period;

    /**
     * 换货参考单号
     */
    @ExcelProperty(value = "换货参考单号")
    private String referenceNumber;

    /**
     * 销售金额(终端收入)
     */
    @ExcelProperty(value = "销售金额(终端收入)")
    private BigDecimal extBaseAmount;

    /**
     * PO供货金额(含税)
     */
    @ExcelProperty(value = "PO供货金额(含税)")
    private BigDecimal extBillTaxAmount;

    /**
     * 优惠总金额
     */
    @ExcelProperty(value = "优惠总金额")
    private BigDecimal extSumFavAmount;

    /**
     * 供应商承担优惠金额
     */
    @ExcelProperty(value = "供应商承担优惠金额")
    private BigDecimal extSumVendorAmount;

    /**
     * 平均优惠
     * 按POSKU维度 取【WP-发货单价】中的[平均优惠]字段。
     */
    @ExcelProperty(value = "平均优惠")
    private BigDecimal avgDiscount;

    /**
     * 优惠差异
     * [优惠差异]=[平均优惠]*[数量]-[供应商承担优惠金额]
     */
    @ExcelProperty(value = "优惠差异")
    private BigDecimal discountDif;

    /**
     * 差异合计
     *
     * 1）发货模式为门店JITX时，[差异合计]=[销售金额(终端收入)]+[优惠总金额]-[100%终端收入]
     * 2）发货模式为其他类型时，[差异合计]=[发货单价]*[100%数量]-[100%收入]
     */
    @ExcelProperty(value = "差异合计")
    private BigDecimal totalDif;
}
